package boc.sx.gateway.protocal;

import boc.sx.gateway.util.ApplicationContextUtil;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageCodec;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.List;

@Component("A")
@Slf4j
public class DefaultCodec extends MessageToMessageCodec<ByteBuf, String> {

    public void encode(ChannelHandlerContext ctx, String msg, List<Object> outList){
        ByteBuf out = ctx.alloc().buffer();
        // 协议编号
        out.writeChar('A');
        // 协议版本号
        out.writeByte(1);
        // 内容长度
        byte[] bytes = msg.getBytes(StandardCharsets.UTF_8);
        out.writeInt(bytes.length);
        // 消息正文
        out.writeBytes(bytes);
        outList.add(out);
    }

    public void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out){
        char protocal = msg.readChar();
//        if (!ApplicationContextUtil.containsBean(String.valueOf(protocal))
//            && !(ApplicationContextUtil.getBean(String.valueOf(protocal)) instanceof DefaultCodec)
//        ){
//            ctx.fireChannelRead(msg);
//            return;
//        }
        byte version = msg.readByte();
        int length = msg.readInt();
        out.add(msg.readBytes(length));
    }

}
